package LeetCode热题HOT100;

import java.util.*;

public class p215数组中的第K个最大元素 {

    public int findKthLargest(int[] nums, int k) {
        //找第K个最大元素，建立一个大小为K的小堆
        //Queue<Integer> minHeap=new PriorityQueue<>(k,((o1, o2) -> o2-o1));  有问题，指定堆的大小，那么正则表达式不能这样写 ((o1, o2) -> o2-o1)
        Queue<Integer> minHeap=new PriorityQueue<>(k,Comparator.comparingInt(a->a));

        for (int i = 0; i <k; i++) {
            minHeap.offer(nums[i]);//存入K个元素的小堆，
        }

        for (int i = k; i <nums.length; i++) {
            Integer peek = minHeap.peek();//比较 堆顶元素和当前数组元素
            if (nums[i]>peek) {
                //最后保证小堆中 是数组中k个最大的数
                minHeap.poll();
                minHeap.offer(nums[i]);//小堆自己重新调整，将堆中最小元素置于堆顶
            }
        }

        return minHeap.peek();
    }

    public int findKthLargest1(int[] nums, int k) {
        Arrays.sort(nums);
        return nums[nums.length-k];

    }

}
